Function.prototype.myBind = function (context, ...args) {
    let _this = this;
    // 创建一个空函数作为中间桥梁，避免直接修改原函数的prototype
    function F() {}
    // 将中间函数的prototype指向原函数的prototype
    F.prototype = _this.prototype;
    // 创建绑定函数
    function bound(...args2) {
        // 判断是否是new调用
        if (this instanceof bound) {
            // 创建新实例，其__proto__指向F.prototype，即原函数的prototype
            const instance = new F();
            // 用新实例作为this调用原函数
            const result = _this.apply(instance, [...args, ...args2]);
            // 如果原函数返回对象，则返回该对象；否则返回新实例
            return result instanceof Object ? result : instance;
        } else {
            // 普通调用，指向绑定的上下文
            return _this.apply(context, [...args, ...args2]);
        }
    }
    return bound;
}
function foo(x,y){
    console.log(this,x,y);
}
let obj={
    a:1
}
let bar=foo.bind(obj,2,3)
// bar()
const res=new bar()
console.log(res);//foo {}

